import { defineConfig, loadEnv } from 'vite'
import vue from '@vitejs/plugin-vue'
import UnoCSS from 'unocss/vite'
import { presetUno, presetAttributify, presetIcons } from 'unocss'
import AutoImport from 'unplugin-auto-import/vite'
import Components from 'unplugin-vue-components/vite'
import { ElementPlusResolver } from 'unplugin-vue-components/resolvers'
import path from 'path'

// https://vitejs.dev/config/
export default defineConfig(({ command, mode }) => {
  // 根据当前工作目录中的 `mode` 加载 .env 文件
  // 设置第三个参数为 '' 来加载所有环境变量，而不管是否有 `VITE_` 前缀
  const env = loadEnv(mode, process.cwd(), '')
  
  return {
    plugins: [
      vue(),
      UnoCSS({
        presets: [
          presetUno(),
          presetAttributify(),
          presetIcons()
        ]
      }),
      AutoImport({
        resolvers: [ElementPlusResolver()],
      }),
      Components({
        resolvers: [ElementPlusResolver()],
        dts: true,
        include: [/\.vue$/, /\.vue\?vue/],
      }),
    ],
    resolve: {
      alias: {
        '@': path.resolve(__dirname, 'src'),
      },
      css: {
        preprocessorOptions: {
          scss: {
            additionalData: `@use "@/styles/element/index.scss" as *;`,
          },
        },
      }
    },
    server: {
      open: true,
      proxy: {
        // API代理配置
        '/evox-drama': {
          target: 'http://47.99.244.63:8080',
          changeOrigin: true
        }
      },
      // 允许跨域
      cors: true
    },
    // 构建配置
    build: {
      outDir: 'dist'
    },
    // 为开发服务器配置自定义代理规则
    define: {
      // 定义全局常量替换方式
      __APP_ENV__: JSON.stringify(env.VITE_APP_ENV),
      __APP_TITLE__: JSON.stringify(env.VITE_APP_TITLE),
      // 添加一个环境变量来控制是否使用mock数据
      __USE_MOCK__: JSON.stringify(env.VITE_USE_MOCK || 'false')
    }
  }
})
